# Список последних изменений #

## v0.2.0 ##

1) Веб-установщик:

* в компоненте webinstaller.php:
    * к некоторым таблицам, устанавливаемой базы данных, добавлены комментарии;
    * небольшой фикс для устранения появления ошибок при установке базы данных на новые версии MySQL;
    * пофиксены некоторые другие баги;
* в компонентах *makeinstall.php*, *valconf.php* и *selfremove.php* откорректированны заголовки;
* поправлены стили интерфейса для корректного отображения в браузере Firefox на ОС Ubuntu при использовании некоторых сторонних тем рабочего стола;
* добавлена возможность смены языка веб-интерфейса без перезагрузки страницы;
* значительно улучшены перехват и обработка ошибок.

2) В модуле *plugins.php* в классе **Plugins**:

* пофиксен баг, вызванный опечаткой при кодинге;
* пофиксен баг, проявляющийся на php7.2 в методах **unpack** и **install**;
* метод **pluginData** теперь просто вазвращает **false** и не устанавливает код ошибки, если запрашиваемый плагин не найден.

3) В модуле *auth.php* в классе **Auth**:

* пофиксен баг, из-за которого куки не сохранялись;
* добавлена возможность использовать в методе **userLogin** e-mail адрес наравне с юзернеймом;
* добавлена возможность создания неограниченного количества сессий для каждого пароля пользователя;
* добавлена возможность прохождения первого шага 2-факторной аутентификации через метод **userLogin**;
* добавлен новый метод **login2FA** для прохождения второго шага 2-факторной аутентификации;
* добавлена новая переменная сессии с ключом **AUTH_2FA_SWAP**, в которой хранятся переменные сессии пользователя до прохождения второго шага аутентификации;
* добавлен новый метод **userSessions** для получения информации об актуальных сессиях пользователя (доступ контролируется новой политикой *'auth_user_sessions'*);
* добавлен новый метод **destroySession** для удаления определённой сессии пользователя (доступ контролируется новой политикой *'auth_destroy_sessions'*);
* добавлен новый метод **destroyAllSessions** для удаления всех сессий пользователя (доступ также контролируется новой политикой *'auth_destroy_sessions'*).

4) В модуле *userman.php* в классе **UserMan**:

* добавлен новый метод **enable2FA** для включения 2-факторной аутентификации паролей;
* добавлен новый метод **disable2FA** для выключения 2-факторной аутентификации паролей.

5) В модуле *discuss.php* в классе **Discuss**:

* добавлен новый метод **getAllComments** для получения сразу всех комментариев к теме c указанным идентификатором.

6) В модуле *share.php* в классе **Share**:

* добавлен новый метод **getMsgAllComments** для получения сразу всех комментариев к сообщению c указанным идентификатором;
* в случае неудач, метод **getFile** теперь возвращает страницы HTTP-статусов вместо **false**.

7) Обновилать спецификация установочного пакета плагинов - добавлена возможность установки CSS-стилей. Версия спецификации увеличена до 0.3.

8) Новый модуль ядра *\_\_loader\_\_.php*, загружаемый вместе с файлом конфигураций *conf.php*, содержит:

* функция **loadPHP** для загрузки PHP библиотек ядра, или любого установленного плагина;
* функция **loadJS** для загрузки JavaScript библиотек ядра, или любого установленного плагина;
* функция **loadCSS** для загрузки CSS библиотек ядра, или любого установленного плагина;
* функция **loadDOC** для получения файлов из документов ядра, или любого установленного плагина при помощи *mod_xsendfile* (для *Apache2*) и *X-Accel-Redirect* (для *NGINX*) или *X-LIGHTTPD-send-file* (для *lighttpd*);
* функция **mntc** для замены запрашиваемой страницы страницей-заглушкой режима обслуживания веб-сервиса;
* функция **dbLink** для упрощённого получения ссылки на базу данных на основе параметров файла конфигураций *conf.php*.

9) Новый модуль ядра *maintenance.php* с классом **Maintenance** для управления режимом обслуживания содержит:
* метод **state** для получения настроек режима обслуживания;
* метод **write** для записи настроек режима обслуживания;
* метод **enable** для включения режима обслуживания;
* метод **disable** для выключения режима обслуживания;
* метод **timeout** для установки предполагаемой длительности работы режима обслуживания;
* метод **startpoint** для установки начальной точки отсчёта таймаута режима обслуживания;
* метод **prmsg** для установки основного сообщения режима обслуживания;
* метод **secmsg** для установки вторичного сообщения режима обслуживания;
* метод **reset** для сброса настроек режима обслуживания к значениям по умолчанию;
* доступ к методам класса контролируется новой политикой *'maintenance_configure'*.

10) В файле конфигураций *conf.php*:

* добавлена новая константа **MECCANO_CSS_DIR**, определяющая путь к папке, в которой хранятся CSS-стили, устанавливаемых плагинов;
* добавлена новая константа **MECCANO_SERVICE_PAGES**, определяющая путь к папке, в которой хранятся страницы HTTP-статусов, страница-заглушка режима обслуживания и файл с настройками режима обслуживания;
* добавлена новая константа **MECCANO_MNTC_IP** отпределяющая список IP-адресов, на которые не распространяется режим обслуживания;
* модуль ядра **__loader__.php** загружается с самим файлом конфигураций.

11) В модуле *extclass.php* в классе **ServiceMethods**:

* в методе **outputFormat** добавлен новый формат *'array'*;
* в методе **checkFuncAccess** добавлен новый аргумент *$userId* для доступа пользователя к функциям, в обход политик доступа и снижения таким образом нагрузки на базу данных, если это касается его персональных данных.

12) В модуле *langman.php* в классе **LangMan**:

* произведено переименование следующих методов:
    * **getTitleSectionsXML** => **getTitleSectionsList**;
    * **getTitleNamesXML** => **getTitleNamesList**;
    * **getTitlesXML** => **getTitlesList**;
    * **getAllTitlesXML** => **getAllTitlesList**;
    * **getTextSectionsXML** => **getTextSectionsList**;
    * **getTextNamesXML** => **getTextNamesList**;
    * **getTextsXML** => **getTextsList**;
    * **getAllTextsXML** => **getAllTextsList**.

13) Для возможности сохранения эмоджи, в качестве кодировки таблиц базы данных используется *'utf8mb4'*.

## v0.1.0 ##

1) Новый модуль *discuss.php* с классом **Discuss** для создания тем обсуждения и комментирования чего-либо;

2) Новый модуль *share.php* с классом **Share** для обмена сообщениями и файлами по типу простой социальной сети. Вместе с модулем добавлены новые политики доступа:

* политика *share_viewing_access* относится к методам:
	* **getFile**, **getFileInfo**, **getMsg**, **msgFiles**, **sumUserMsgs**, **userMsgs**, **msgStripe**, **appendMsgStripe**, **updateMsgStripe**, **sumUserFiles**, **userFiles**, **fileStripe**, **appendFileStripe**, **updateFileStripe**, **getMsgComment**, **getMsgComments**, **appendMsgComments**, **updateMsgComments** и **repostMsg**.

* политика *share_modify_msgs_files* относится к методам:
	* **delFile**, **updateFile**, **delMsg** и **updateMsg**.

* политика *share_modify_comments* относится к методам:
	* **editMsgComment** и **eraseMsgComment**.

3) Изменения в модуле *unifunctions.php*:

* новая функция **pregDbName** для проверки допустимости имени, создаваемой базы данных;
* в функции **pregPref** разрешённая длина, принимаемой строки, уменьшена до 10 символов;
* символ *№* исключён из числа разрешённых в паролях (**pregPassw**);
* при генерации соли (**makeSalt**) и идентификаторов (**makeIdent**) больше не используется функция *rand*, она заменена функцией *mt_rand*;
* новая функция **genPassword** для генерации случайных паролей по заданным критериям сложности;
* новая функция **guid** для генерации глобально уникальных идентификаторов;
* новая функция **pregGuid**, проверяющая получаемую строку на соответствие формату глобально уникального идентификатора.

4) Изменения в модуле *auth.php*:

* в метод **userLogin** добавлен новый аргумент *blockBrute*, позволяющий временно блокировать аутентификацию пользователя по паролю после нескольких введённых подряд неверных паролей;
* в файл настроек *conf.php* были добавлены новые константы. **MECCANO_AUTH_LIMIT** устанавливает количество допустимых вводов неверного пароля до временной блокировки аутентификации пользователя, а **MECCANO_AUTH_BLOCK_PERIOD** устанавливает период временной блокировки аутентификации пользователя;
* удалена политика *auth_session*.

5) Изменения в модуле *langman.php*:

* новый метод **installLang** для установки системных языков;
* в установочный пакет добавлен файл *languages.xml*, в котором содержится информация о системных языках, установленных из пакета. По этой причине в файле *metainfo.xml* версия спецификации, описывающей структуру пакета изменена на *0.2*. Корректрость структуры файла *languages.xml* проверяется новой схемой проверки *langman-language-v01.rng*;
* исправлены ошибки в методе **addLang**.

6) Изменения в модуле *userman.php*:

* новый метод **createPassword** для генерации вторичных паролей пользователей.

7) Изменения в модуле *logman.php*:

* Некоторые методы были переименованы:
	* **delEvents** -> **delLogEvents**;
	* **newRecord** -> **newLogRecord**.

8) Изменения в модуле *policy.php*:

* Некоторые методы были переименованы:
	* **addGroup** -> **addPolicyToGroup**;
	* **delGroup** -> **delPolicyFromGroup**;
	* **funcAccess** -> **setFuncAccess**;
	* **checkAccess** -> **checkFuncAccess**;
	* **install** -> **installPolicy**.

9) Некоторые методы были перенесены из своих классов в другие классы:

* **Logman->newLogRecord** в **ServiceMethods->newLogRecord**;
* **Policy->checkFuncAccess** в **ServiceMethods->checkFuncAccess**;
* **Policy->addPolicyToGroup** в **UserMan->addPolicyToGroup**;
* **Policy->delPolicyFromGroup** в **UserMan->delPolicyFromGroup**.

10) Изменения в модуле *extclass.php*:

* новый метод **outputFormat**, устанавливающий способ вывода данных в виде стороки *json*, либо объекта *DOMDocument*;
* во всех методах классов всех модулей ядра, где ранее вывод данных осуществлялся в виде объекта *DOMDocument*, обеспечен вывод в виде строки *json*.
* в методе **setError** реализована возможность вывода на страницу информации об ошибках. Для управления вывода информации об ошибке на экран в файл настроек *conf.php* была добавлена константа **MECCANO_SHOW_ERRORS**.

11) Изменения в модуле *files.php*:

* в методе **setError** реализована возможность вывода на экран информации об ошибке.

12) Изменения в модуле *plugins.php*:

* операции над плагинами блокируются во время выполнения методов **unpack**, **delUnpacked**, **install** и **delInstalled**.

13) Строки, сохраняемые в базе данных, больше не проходят предварительную обработку функцией **htmlspecialchars**.
